package main

import "fmt"

func main() {

	//定义只能存储string类型的数组
	var arr [3]string
	arr[0] = "foo"
	arr[1] = "bar"
	arr[2] = "nar"
	fmt.Println(arr)

	//定义能存储任何类型的数组
	var arr1 [2]interface{}
	arr1[0] = 1
	arr1[1] = "hehe"
	fmt.Println(arr1)

	//自动推导类型
	arr2 := [4]interface{}{1, "foo", true, []string{"foo", "bar", "yuanlj"}}
	fmt.Println(arr2)
	fmt.Println(arr2[3])

	//遍历数组
	for i:=0;i<len(arr);i++{
		fmt.Println(arr[i])
	}

	//遍历数组
	for k,v:=range arr2{
		fmt.Println("k=",k,",v=",v)
	}

	arr3:=[10]int{1,2,3}
	fmt.Println("arr3=",arr3)

	var arr4 [10]int = [10]int{1,2,4}
	fmt.Println("arr4=",arr4)

	//使用自动类型推导，根据元素个数创建数组
	arr5:=[...]int{1,2,3}
	fmt.Println(arr5)
	fmt.Printf("%T\n",arr5) //[3]int

	//数组名和数组第一个下标的内存地址是相同的，数组在内存中的存储是连续的
	fmt.Printf("%p\n",&arr5)
	fmt.Printf("%p\n",&arr5[0])
	fmt.Printf("%p\n",&arr5[1])

	//定义数组时，只设置指定下标的数剧
	arr6:=[10]int{7:10}
	fmt.Println(arr6)

}
